package net.linku.utils.response;

import java.io.Serializable;

/**
 * SoaResponse是一个通用的响应类，用于封装服务调用的响应结果。
 *
 * @param <T>    正常响应的数据类型
 * @param <ErrT> 错误响应的数据类型
 *
 * @version 1.0
 */
public class SoaResponse<T, ErrT> implements Serializable {
    private static final String RETURN_SUCCESS = "000000";
    private static final long serialVersionUID = 889695893318362669L;

    /**
     * 返回码，默认值为 "000000" 表示成功
     */
    private String returnCode = RETURN_SUCCESS;

    /**
     * 返回信息
     */
    private String returnMsg;

    /**
     * 日志业务数据
     */
    private String logBizData;

    /**
     * 处理结果，默认值为 true 表示成功
     */
    private Boolean processResult = true;

    /**
     * 业务处理结果，默认值为 true 表示成功
     */
    private Boolean bizProcessResult = true;

    /**
     * 正常响应的数据
     */
    private T responseVo;

    /**
     * 错误响应的数据
     */
    private ErrT errT;

    /**
     * 时间戳
     */
    private String timestamp = System.currentTimeMillis() + "";

    /**
     * 跟踪ID
     */
    private String traceId;

    /**
     * RPC ID
     */
    private String rpcId;

    /**
     * 默认构造函数
     */
    public SoaResponse() {
    }

    /**
     * 获取RPC ID
     *
     * @return RPC ID
     */
    public String getRpcId() {
        return this.rpcId;
    }

    /**
     * 设置RPC ID
     *
     * @param rpcId RPC ID
     */
    public void setRpcId(String rpcId) {
        this.rpcId = rpcId;
    }

    /**
     * 获取跟踪ID
     *
     * @return 跟踪ID
     */
    public String getTraceId() {
        return this.traceId;
    }

    /**
     * 设置跟踪ID
     *
     * @param traceId 跟踪ID
     */
    public void setTraceId(String traceId) {
        this.traceId = traceId;
    }

    /**
     * 获取处理结果
     *
     * @return 处理结果
     */
    public Boolean getProcessResult() {
        return this.processResult;
    }

    /**
     * 设置处理结果
     *
     * @param processResult 处理结果
     */
    public void setProcessResult(Boolean processResult) {
        this.processResult = processResult;
    }

    /**
     * 获取业务处理结果
     *
     * @return 业务处理结果
     */
    public Boolean getBizProcessResult() {
        return this.bizProcessResult;
    }

    /**
     * 设置业务处理结果
     *
     * @param bizProcessResult 业务处理结果
     */
    public void setBizProcessResult(Boolean bizProcessResult) {
        this.bizProcessResult = bizProcessResult;
    }

    /**
     * 获取正常响应的数据
     *
     * @return 正常响应的数据
     */
    public T getResponseVo() {
        return this.responseVo;
    }

    /**
     * 设置正常响应的数据
     *
     * @param responseVo 正常响应的数据
     */
    public void setResponseVo(T responseVo) {
        this.responseVo = responseVo;
    }

    /**
     * 获取错误响应的数据
     *
     * @return 错误响应的数据
     */
    public ErrT getErrT() {
        return this.errT;
    }

    /**
     * 设置错误响应的数据
     *
     * @param errT 错误响应的数据
     */
    public void setErrT(ErrT errT) {
        this.errT = errT;
    }

    /**
     * 获取返回码
     *
     * @return 返回码
     */
    public String getReturnCode() {
        return this.returnCode;
    }

    /**
     * 设置返回码
     *
     * @param returnCode 返回码
     */
    public void setReturnCode(String returnCode) {
        this.returnCode = returnCode;
    }

    /**
     * 获取返回信息
     *
     * @return 返回信息
     */
    public String getReturnMsg() {
        return this.returnMsg;
    }

    /**
     * 设置返回信息
     *
     * @param returnMsg 返回信息
     */
    public void setReturnMsg(String returnMsg) {
        this.returnMsg = returnMsg;
    }

    /**
     * 获取日志业务数据
     *
     * @return 日志业务数据
     */
    public String getLogBizData() {
        return this.logBizData;
    }

    /**
     * 设置日志业务数据
     *
     * @param logBizData 日志业务数据
     */
    public void setLogBizData(String logBizData) {
        this.logBizData = logBizData;
    }

    /**
     * 获取当前对象是否成功，监控用
     *
     * @return 处理结果
     */
    public Boolean isSuccessForMornitor() {
        return this.getProcessResult();
    }

    /**
     * 获取时间戳
     *
     * @return 时间戳
     */
    public String getTimestamp() {
        return this.timestamp;
    }

    /**
     * 设置时间戳
     *
     * @param timestamp 时间戳
     */
    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    /**
     * 获取业务处理结果
     *
     * @return 业务处理结果
     */
    public Boolean bizProcessResult() {
        return this.getBizProcessResult();
    }
}